Clases en Python

Bienvenidas nuevamente!!!

En esta sesión veremos qué son las clases, para qué sirven y cómo funcionan. Además crearemos nuevas clases y veremos que es muy fácil hacer objetos nuevos en python!

La primera pregunta será dirigida hacia ustedes, ¿alguna sabe algo acerca de las clases? o ¿para ustedes qué es una clase?

Bueno después de haber escuchado sus opiniones veremos que una clase es esto:

Esta imagen significa que las clases son una especie de plano (o instrucciones) para crear un nuevo objeto. En el caso de la imagen el objeto sería un edificio, pero podemos crear cualquier tipo de objetos!!! OJO, no hay que confundirnos, las clases no son los objetos como tal, si te das cuenta un mismo plano nos sirve para crear 1,2 ... 'n' número de casas, todas las casas o edificios que se construyan con el mismo plano van a tener exactamente las mismas propiedades. Por ejemplo, todas las casas construídas van a tener cuartos del mismo tamaño, con el mismo arreglo espacial y los mismos enchufes!

Lo mismo pasa en python, si creas una clase 'casa', cada vez que llames a esa clase vas a crear un objeto casa con las características especificadas dentro de la clase.

Aunque no lo sabíamos (a excepción de las que si sabían de las clases) ya habíamos trabajado con clases anteriormente. Cuando tu creas un 'string', todas las propiedades de la clase 'string' son heredadas al objeto que creaste. Recuerdas que ya habíamos visto unas cuantas de las propiedades de las 'string' y de las funciones que se pueden hacer con ellas...

Esto me lleva al siguiente punto que hay que abordar. Las clases llevan dentro de sí funciones (que cuando están en las clases se llaman métodos) y atributos (que son las características del objeto). Así que se puede pensar en las clases como un nivel de jerarquía mayor a lo que ya habíamos visto antes, como variables y funciones.

Antes de pasar a la parte del código, alguien tiene alguna duda hasta ahora??

Sintaxis de las clases, a.k.a cómo se escriben las clases en python.

Ya que hemos comprendido el concepto de las clases pasaremos a ver cómo es que le tiene uno que escribir a python para que entienda que queremos crear una.

Lo primero con lo que se inicia es con la palabra class seguido del nombre de nuestra clase con unos paréntesis que llevan la palabra objeto dentro de si. Al final de todo esto llevan dos puntos, al estilo de las funciones que ya vimos.

class MiCasa(object):

Después viene la parte importante de una clase. Para que se pueda inicializar correctamente, una clase debe de contar con un método "inicializador" que se llama init que va a depender del objeto (o instancia) que estamos creando y de todos los atributos que queramos darle. Después vamos a crear variables para cada instancia. Sé que suena un poco complicado pero veamos como se escribe un ejemplo.

class MiCasa(object): """Clase que va a crear un objeto casa con los atributos cuartos, puertas, ventanas y tamaño""" def __init__(self, cuartos, puertas, ventanas, tamaño): self.cuartos = cuartos self.puertas = puertas self.ventanas = ventanas self.tamaño = tamaño

Con esto ya podemos empezar a ver la forma de una clase. En este ejemplo, lo que vemos es una clase con atributos.

Ejercicio 1

Prueba escribir esta clase para empezar a crear "casas".


In [ ]:


In [ ]:


In [ ]:

Ejercicio 2

Después de que creaste una (o varias) instancias de esta clase, prueba acceder a sus atributos con la notación de punto. Ejemplo

casa.ventanas


In [ ]:


In [ ]:


In [ ]:

Ya que tenemos una instancia con atributos, por qué no empezar a meter métodos que operen sobre estos atributos. Se me ocurre que tal vez queremos calcular el precio de nuestra casa y eso dependerá del número de cuartos y el tamaño. Por cuarto podremos cobrar 50,000.00 mxn y el tamaño si es menor o igual a 150m la tarifa es de 800,000.00 mnx pero si es mayor a 150m cobraremos 1,000,000.00 mxn.

Ejercicio 3

Escribe la función "precio" que fue descrita anteriormente


In [ ]:


In [ ]:


In [ ]:

Ahora que ya tenemos la función, podemos agregarla a nuestra clase para que se convierta en un método. Esto es bastante sencillo ya que solo tenemos que poner nuestro método dentro de la indentación de nuestra clase y para llamar al método ocuparemos la misma notación de punto. Ejemplo

casa.precio

Ejercicio 4

copia el método "precio que escribiste anteriormente en la clase MiCasa y ve en cuánto está valuada la casa que construíste


In [ ]:


In [ ]:


In [ ]:

Felicidades!!!

Hemos finalizado con el concepto básico y la sintaxis de las clases, ahora vamos a profundizar un poco en las particularidades.

Pero antes de continuar, alguien tiene preguntas?

Yo si tengo algunas, la primera es qué pasa si queremos usar un método que está fuera de la clase, podemos llamarlo? o el caso contrario, qué pasa si queremos usar un método que hay en una clase para que funcione en otro ejemplo independiente de la instancia?

Para responder esto hay que experimentar!!!

Ejercicio 5

Haz una función que se llame expandir que dependa de del tamaño de la casa. Esta función debería de agrandar el tamaño en un 25%. Ahora prueba usar esta función con una instancia de MiCasa


In [ ]:


In [ ]:


In [ ]:

Ejercicio 6

Intenta usar el método precio para calcular el costo de 5 cuartos con 800m


In [ ]:


In [ ]:


In [ ]:

Otra pregunta que se me ocurre es si podemos hacer que un atributo sea constante, es decir, que todas las instancias que creemos con MiCasa sean de color blanco...

Ejercicio 7

Crea un atributo constante en MiCasa


In [ ]:


In [ ]:


In [ ]:

Lo último que veremos en esta sesión es el concepto de "Herencia", así como tus padres crearon un@ hij@ con características similares a los ellos, las clases también pueden dar origen a otras clases.

Básicamente, la herencia en las clases significa que puedes crear una clase nueva que posea atributos y métodos similares a otros que tiene una clase creada anteriormente. Como ejemplo, piensa en nuestra clase MiCasa, los atributos que tiene pueden bien compartirse con otros objetos parecidos como son edificios, hospitales, restaurantes, entre otros. Si quisiéramos abstraer estos objetos físicos en un concepto podríamos hacer una clase madre llamada Inmueble. Un inmueble es un concepto que tenemos que es muy general y puede abarcar varios objetos físicos (como los mencionados anteriormente) y podríamos pensar como que un inmueble es "la madre" de cualquier tipo de construcción. Todos los atributos y métodos que posea la clase Inmueble pueden ser utilizados por la clase Edificio, MiCasa, etc y lo que es mejor aún, no sólo los puedes utilizar, si no puedes agregar más cosas e incluso modificar los métodos o atributos de la clase madre.

Para crear una clase hija, lo que debes hacer es escribir de la siguiente manera:

class Hija(Madre):

Yo calculo que para este entonces se abrá terminado el tiempo, así que l@s invito a hacer los ejercicios de codecademy acerca de las clases en Python. Creo que son muy buenos y divertidos de hacer, y pueden complementar lo que vimos hoy. La liga es la siguiente: Codecademy

Gracias y nos vemos la siguiente reunión!!!


In [ ]: